package tedu.week03.io;

import java.io.*;
import java.nio.CharBuffer;

/**
 * <pre>
 *      Writer/reader字符流.
 *          字符流比字节流的方便之处在于可以直接操作字符.
 *
 *          字符流与字节流的区别:
 *              字节流:程序--&gt;内存--&gt;文件
 *              字符流:程序--&gt;缓存--&gt;内存--&gt;文件
 *          <b>
 *          在日常开发时,很多文件的传输都是以字节的方式进行传输的,只有在有字符的情况下考虑采用字符流.
 *          例如:图片,音乐...
 *          </b>
 * </pre>
 *
 * @author : resty
 * @date : 2019年08月13日    11时
 **/
public class WriterDemo {



    /**
     * 字符输入流/write(String str).
     * <pre>
     *      Writer writer = new FileWriter(file);
     *      String str = "Hello World!!!";
     *      writer.write(str);
     *      writer.close();
     * </pre>
     * <b>
     *     字符流有可以直接操作字符串的方法.
     * </b>
     * @param file  <b>指定的文件</b>
     * @throws IOException  <b>忽略异常</b>
     */
    public static void write1(File file) throws IOException {
        Writer writer = new FileWriter(file);
        String str = "Hello World!!!";
        writer.write(str);
//        writer.flush();//刷新缓存
        writer.close();
    }
    /**
     * 字符输入流/write(String str).
     * <pre>
     *      Writer writer = new FileWriter(file,true);
     *      String str = "\r\nHello World!!!";
     *      writer.write(str);
     *      writer.close();
     * </pre>
     * <b>
     *     如果想要在原有文件的基础上添加内容,则必须在FileWriter类的实例参数中,添加true的参数.
     *     想实现换行,也需要添加"\r\n"内容.
     * </b>
     * @param file  <b>指定的文件</b>
     * @throws IOException  <b>忽略异常</b>
     */
    public static void write2(File file) throws IOException {
        Writer writer = new FileWriter(file,true);
        String str = "\r\nHello World!!!";
        writer.write(str);
        writer.close();
    }

    /**
     * 字符输出流/read(char []cs).
     * <pre>
     *         Reader reader = new FileReader(file);
     *         char cs[] = new char[1024];
     *         int len = reader.read(cs);
     *         String str = new String(cs, 0, len);
     *         System.out.println(str);
     *         reader.close();
     * </pre>
     * <b>
 *          字符输出流的输出内容应该放入到char数组当中.
     *      通过new String(cs,0,len)截取对应的长度内容转换成字符串.
     * </b>
     *
     * @param file <b>指定文件</b>
     * @throws IOException <b>忽略异常</b>
     */
    public static void read1(File file)throws  IOException {
        Reader reader = new FileReader(file);
        char cs[] = new char[1024];
        int len = reader.read(cs);
        String str = new String(cs, 0, len);
        System.out.println(str);
        reader.close();
    }

    /**
     * 字符输出流/read().
     * <pre>
     *         Reader reader = new FileReader(file);
     *         char cs[] = new char[1024];
     *         int len = 0;
     *         int temp = 0 ;
     *         while ((temp = reader.read()) != -1) {
     *             cs[len]=(char)temp;
     *             len++;
     *         }
     *         String str = new String(cs,0,len);
     *         System.out.println(str);
     *         reader.close();
     * </pre>
     * <b>
     *          字符输出流的输出内容应该放入到char数组当中.
     *      通过new String(cs,0,len)截取对应的长度内容转换成字符串.
     * </b>
     *
     * @param file <b>指定文件</b>
     * @throws IOException <b>忽略异常</b>
     */
    public static void read2(File file)throws  IOException {
        Reader reader = new FileReader(file);
        char cs[] = new char[1024];
        int len = 0;
        int temp = 0 ;
        while ((temp = reader.read()) != -1) {
            cs[len]=(char)temp;
            len++;
        }
        String str = new String(cs,0,len);
        System.out.println(str);
        reader.close();
    }



    public static void main(String[] args) throws IOException {
        File file = new File("resty.primary/src/main/resources/write.txt");
        if (!file.exists()) {
            file.createNewFile();
        }
//        read2(file);
        write1(file);


    }
}
